[AD] Scalaアプリケーションの開発・保守は合同会社ミルクソフトにお任せください
この記事では、Scala 3で廃止される予定の大域脱出について解説します。
大域脱出は廃止されます
ネストされた匿名関数からのreturn、通称「大域脱出(nonlocal returns)」は非推奨となりました。
scala.runtime.NonLocalReturnException
のかわりに、当面の間は scala.util.control.NonLocalReturns
が一時的な代替品として提供されます。
import scala.util.control.NonLocalReturns.* returning { ... throwReturn(x) ... }
大域脱出の問題点とは
大域リターンは scala.runtime.NonLocalReturnException
を投げてキャッチすることで実装されています。
しかし以下のような欠点があります。
- ふつうプログラマはこのような実装であることを期待しない
- 例外を投げたりキャッチしたりすることがパフォーマンスに影響を与える可能性がある
- 途中の例外ハンドラが全てキャッチするよう実装されていると、
NonLocalReturnException
を横取りできてしまう
移行について
Scala 2.13では既に非推奨となっています。
新規の使用はやめましょう。
サイト内検索
カテゴリ「Scala 3で廃止予定の機能」の記事
弱適合:Scala 3で廃止予定の機能(13)
DelayedInitの解説:Scala 3で廃止予定の機能(1)
[this]修飾子:Scala 3で廃止予定の機能(12)
Scala 3で変更・廃止予定の機能と移行作業についてのまとめ
シンボルリテラルの解説:Scala 3で廃止予定の機能(3)
自動適用:Scala 3で廃止予定の機能(14)
forSomeによる存在型:Scala 3で廃止予定の機能(6)
型射影:Scala 3で廃止予定の機能(7)
手続き型構文:Scala 3で廃止予定の機能(8)
先行初期化:Scala 3で廃止予定の機能(9)
do-while文の解説:Scala 3で廃止予定の機能(4)
Scala 2のマクロ:Scala 3で廃止予定の機能(5)
クラスシャドウイング:Scala 3で廃止予定の機能(10)
XMLリテラルの解説:Scala 3で廃止予定の機能(2)
大域脱出:Scala 3で廃止予定の機能(11)
カテゴリ「Scala 3で廃止予定の機能」の記事
弱適合:Scala 3で廃止予定の機能(13)
DelayedInitの解説:Scala 3で廃止予定の機能(1)
[this]修飾子:Scala 3で廃止予定の機能(12)
Scala 3で変更・廃止予定の機能と移行作業についてのまとめ
シンボルリテラルの解説:Scala 3で廃止予定の機能(3)
自動適用:Scala 3で廃止予定の機能(14)
forSomeによる存在型:Scala 3で廃止予定の機能(6)
型射影:Scala 3で廃止予定の機能(7)
手続き型構文:Scala 3で廃止予定の機能(8)
先行初期化:Scala 3で廃止予定の機能(9)
do-while文の解説:Scala 3で廃止予定の機能(4)
Scala 2のマクロ:Scala 3で廃止予定の機能(5)
クラスシャドウイング:Scala 3で廃止予定の機能(10)
XMLリテラルの解説:Scala 3で廃止予定の機能(2)
大域脱出:Scala 3で廃止予定の機能(11)